package com.ruoyi.common.enums;

import java.util.HashMap;
import java.util.Map;
import org.springframework.lang.Nullable;

/**
 * 请求方式
 *
 * @author ruoyi
 */
/*
* 1.GET请求
一般情况下，通过接口查询相应的数据时一般是采用GET请求
*2.POST方式
post方法一般用于创建订单或者创建的某个动作，有的公司还会将修改的操作也加入进来，讲实话，还是用post方法专注于一个动作最好。
*3.PUT请求
put请求专注于update操作，但是与之相关的是还有一个patch请求，两者虽然都专注于update操作，但是前者是全局而言，后者是局限于某一条件或者范围而言，简单的说就是两者的粒度是不同的。大家可以百度一下。
*put请求需要注意的是，虽然和post请求都是执行的改变动作，但是它所采用的参数传递需要用到query格式，否则是拿不到前台传递的参数，通俗的说就是参数为null.
*4.DELETE请求
顾名思义，就是执行相应的删除操作，配合数据库进行相应的删除动作。
* */
public enum HttpMethod
{
    GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;

    private static final Map<String, HttpMethod> mappings = new HashMap<>(16);

    static
    {
        for (HttpMethod httpMethod : values())//values:该方法可以将枚举类型成员以数组的形式返回
        {
            mappings.put(httpMethod.name(), httpMethod);
        }
    }
//注解Nullable表示对应的值可以为空
//注解NonNull可以标注在方法，字段，参数之上，表示对应的值不可以为空
    @Nullable
    public static HttpMethod resolve(@Nullable String method)
    {
        return (method != null ? mappings.get(method) : null);
    }

    public boolean matches(String method)
    {
        return (this == resolve(method));
    }
}
